//
//  MainViewController.swift
//  WBSwift
//
//  Created by 钱学明 on 17/3/2.
//  Copyright © 2017年 STT. All rights reserved.
/**
 swift 中新增加了命名空间 作用是可以避免重复  意味着不同项目中的命名空间是不一样的 默认情况下命名空间的名称就是当前
 项目的名称 所以在使用三方框架的时候尽量使用cocoapods 来进行 用来避免命名重复
 正是应为swift中有了命名空间 所以通过一个字符串创建一个类 和oc中是不一样的 OC 中可以通过类名创建一个类
 而swift中通过一个类名创建一个类需要加上命名空间
 
 swift 中 ？ 代表可选 既 可以有值 也可以没有值
 
 
 swift 中定义一个Optional的值很容易 只需要在类型后面加上 ？ 就可以了
 而optional 类型的值是不能够直接使用的 需要拆包
 拆包有显示拆包和隐士拆包
 当需要拆包时候 表明我们知道这个Optional一定是有值得 之所以需要拆包是应为Optiional 是一个枚举类型
 
anyObject 不支持 +  让字符串加在一起的
 swift 中如果想要通过一个Class 类型来创建一个类 必须告诉系统这个Class的一个确切的类型
 
 在swift中不要强制
 
 guard 条件表达式  else {
 需要执行的语句 只有条件为假的时候才会执行 并且guard结尾的时候一定要return
 
 guard 可以有效的解决可选绑定
 }
 
 */

import UIKit



class MainViewController: UITabBarController {

    
    
    
    // 重新载入 viewDidLoad 方法
    override func viewDidLoad(){
    
         /*
        注意swift 开发中定义变量的时候要用let 只有真正需要修改时候才需要用到
        var
        */
        
        /*
        ios  7 之后只需要设置tintColor 之后 tabbar的图片和文字就会渲染一致
        */
//        tabBar.tintColor = UIColor.orange
//        addChildViewControllers()
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
//        tabBar.addSubview(composeButton)
        
    }
    
    /*添加子控制器 */
    func addChildViewControllers() {
        
        addChildViewController("HomeTableViewController", title: "首页", imagename: "tabbar_home")
        addChildViewController("MessageTableViewController", title: "消息", imagename: "tabbar_message_center")
        addChildViewController("DiscoverTableViewController", title: "发现", imagename: "tabbar_discover")
        addChildViewController("ProfileTableViewController", title: "我", imagename: "tabbar_profile")
        
    }
    
    func addChildViewController(_ childController: String,title:String ,imagename:String) {
        
        guard let name = Bundle.main.infoDictionary!["CFBundleExecutable"] as?String else {
            ALog(messge: "获取命名空间失败")
            return
        }
        
        let clas:AnyClass? = NSClassFromString(name + "." + childController)
        guard let typeCls = clas as?UITableViewController.Type else {
            ALog(messge: "class  不能当做UITableViewController")
            return;
        }
        
        let childVC = typeCls.init()
        childVC.navigationItem.title = title
        childVC.tabBarItem.title = title
        childVC.tabBarItem.image = UIImage(named:imagename)
        childVC.tabBarItem.selectedImage = UIImage(named:imagename + "_highlighted")
        let nav = UINavigationController(rootViewController:childVC)
        addChildViewController(nav)
        
    }
    /*
     public   最大权限 可以在当前framework 和其他framework中访问
     internal   默认的权限 可以在当前framework中随意的访问
     private   私有权限 只能在当前文件中访问
     以上权限可以修饰属性 方法  和类 在企业开发中建议要严格控制权限 
     如果给按钮的监听方法加上 private 就会报错 报错的原因是因为监听
     oc 是动态派发 而swift中所有的内容都是在编译时候派发的
     如果想让swift中的方法也支持动态派发就需要加上 @objc 告诉系统需要动态派发
     @objc 重要用于oc 与swift的混编
     */
    // 私有方法
  @objc private func butAction()  {
        ALog(messge: "bugAciton")
    
    }
     // MARK : --  懒加载
 private   lazy var composeButton:UIButton = {
        () -> UIButton
        in
     /*
        let but = UIButton()
        but.setImage(UIImage(named:"tabbar_compose_icon_add"), for: UIControlState.normal)
        but.setImage(UIImage(named:"tabbar_compose_icon_add_hightlighted"), for: UIControlState.selected)
        but.setBackgroundImage(UIImage(named:"tabbar_compose_button"), for: UIControlState.normal)
        but.setBackgroundImage(UIImage(named:"tabbar_compose_button_highlighted"), for: UIControlState.selected)
        but.addTarget(self, action: Selector("butAction"), for: UIControlEvents.touchUpInside)
        // 调整按钮的尺寸
        but.sizeToFit()
        */
    let but = UIButton(imageName:"tabbar_compose_icon_add",backgroundImageName:"tabbar_compose_button_highlighted")
    
        return but
    }()

}
